package com.example.bootdemo.model;

import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.*;

import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;

@Data
@Builder
@EqualsAndHashCode(callSuper = false)
@TableName("emp")
@NoArgsConstructor
@AllArgsConstructor
public class Emp extends Model<Emp> implements Serializable {

    private static final long serialVersionUID = 2603890837103787306L;

    /**
     * 主键
     */
    @TableId
    private Long id;

    /**
     * 姓名
     */
    @TableField(value = "name", condition = SqlCondition.LIKE)
    private String name;

    /**
     * 年龄
     */
    @TableField(condition = "%s&lt;#{%s}", fill = FieldFill.UPDATE)
    private Integer age;

    /**
     * 邮箱
     */
    private String email;

    /**
     * 直属上级id
     */
    private Long managerId;

    /**
     * 创建时间
     */

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /*
    @TableField(exist = false) 注解加载bean属性上，表示当前属性不是数据库的字段，
    但在项目中必须使用，这样在新增等使用bean的时候，mybatis-plus就会忽略这个，不会报错

     * 备注（不与数据库字段对应） # transient 不参与序列化
     */
    private String remark;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.UPDATE)
    private LocalDateTime updateTime;

    @Version
    private Integer version;

    //  @TableField(select = false)
/*只对自动注入的sql起效:
插入: 不作限制
查找: 追加where条件过滤掉已删除数据,且使用 wrapper.entity 生成的where条件会忽略该字段
更新: 追加where条件防止更新到已删除数据,且使用 wrapper.entity 生成的where条件会忽略该字段
删除: 转变为 更新


1.如何 insert ?
字段在数据库定义默认值(推荐)
insert 前自己 set 值
使用自动填充功能

 2.删除接口自动填充功能失效
使用 update 方法并: UpdateWrapper.set(column, value)(推荐)
使用 update 方法并: UpdateWrapper.setSql("column=value")
使用Sql注入器注入com.baomidou.mybatisplus.extension.injector.methods.LogicDeleteByIdWithFill并使用(推荐)

*/

    @TableField(fill = FieldFill.INSERT)
    @TableLogic(value = "0", delval = "1")
    private Integer deleted;

    @Override
    public Serializable pkVal() {
        // TODO Auto-generated method stub
        return this.id;
    }
}
